home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (c) 1988 by Caldera Corporation */
-
- /* PO box 3252, Ann Arbor, MI 48106 (313) 996-9059 */
-
- /* File: windows_main.c */
- /* Compilers: LightSpeedC 3.0, Aztec C 3.0 */
-
- /* Abstract: */
- /* high level and code segment 1 routines for windows */
-
- /* History: */
- /* 2/10/89 1.0d1 - released final 1.0 version */
- /* 6/15/89 1.0d2 - hacked up for public release as part of MacHack */
-
-
- #include <Compatability.h> /* handle compiler differences */
- #include <StdInclude.h> /* include required headers, etc */
- #include "windows.h" /* include globals, prototypes, etc */
-
- MenuHandle menuHdls[MAXMENUS+1]; /* array of menu handles */
- Boolean done; /* quit program flag */
- EventRecord myEvent; /* app event record */
- WindowRecord wRecs[MAXWINDOWS]; /* array of window records */
- WindowPtr wPtrs[MAXWINDOWS]; /* array of window pointers */
- Rect dragRect; /* drag window bounds */
- Rect limitRect; /* resize window bounds */
-
-
- OSErr DoAppleCmds( theItem )
- int theItem;
- {
- char name[256]; /* string for DA name */
- OSErr error; /* error returned by open */
- GrafPtr tempPtr; /* original GrafPort ptr */
-
- switch(theItem)
- {
- case appleABOUT:
-
- return( miscErr );
- break;
-
- default:
- GetPort( &tempPtr );
- GetItem( menuHdls[1], theItem, name ); /* get the DA item/name */
- error = OpenDeskAcc( name ); /* open the desk accessory */
- SetPort( tempPtr ); /* reset grafport to original*/
- }
- return( noErr );
- }
-
-
- OSErr DoFileCmds ( theItem )
- int theItem;
- {
- switch( theItem )
- {
- case fileQUIT:
- done = TRUE; /* set program done flag to TRUE*/
- break;
-
- default:
- return( miscErr );
- }
- return( noErr );
- }
-
-
- OSErr DoOptionCmds( theItem )
- int theItem;
- {
- WindowPtr wPtr;
- int i;
-
- switch( theItem )
- {
- case ADD_ITEM:
- AppendMenu( GetMHandle( OPTIONMENU ), "\PAppended item" );
- break;
-
- case NEW_WINDOW:
- wPtr = AllocWindow();
- break;
-
- default:
- return( miscErr );
- }
- return( noErr );
- }
-
-
- OSErr Dispatch ( menuResult )
- long menuResult;
- {
- int theMenu; /* menu selected */
- int theItem; /* item selected */
- int error; /* error returned */
-
- theMenu = HiWord( menuResult ); /* menuID selected */
- theItem = LoWord( menuResult ); /* item# selected */
-
- switch(theMenu) {
- case APPLEMENU:
- error = DoAppleCmds( theItem );
- break;
-
- case FILEMENU:
- error = DoFileCmds( theItem );
- break;
-
- case OPTIONMENU:
- error = DoOptionCmds( theItem );
- break;
-
- default:
- HiliteMenu( 0 ); /* un-hilite selected menu */
- return( miscErr );
- }
- HiliteMenu( 0 ); /* un-hilite selected menu */
- return( noErr );
- }
-
-
- void DoKey( keyMsg, keyMods )
- long keyMsg;
- short keyMods;
- {
- char keyPressed;
-
- keyPressed = (char)( BitAnd( keyMsg, charCodeMask ));
- if( BitAnd( keyMods, cmdKey ) != 0 )
- Dispatch( MenuKey ( keyPressed )); /* Command key down */
- }
-
-
- OSErr DoUpdate( wPtr )
- WindowPtr wPtr;
- {
- GrafPtr tempPtr;
-
- if ( wPtr == NULL)
- return ( nilHandleErr );
-
- GetPort( &tempPtr ); /* save current active grafPort */
- SetPort( wPtr ); /* make update window active grafPort */
- ClipRect ( &(wPtr->portRect) ); /* make sure clipRect is window sized */
- BeginUpdate( wPtr ); /* visRgn temporarily = updateRgn */
- if( HasGrow ( wPtr ))
- DrawGrowIcon( wPtr ); /* update grow icon appropriately */
- DrawControls ( wPtr );
- EndUpdate( wPtr ); /* restore normal visRgn of grafport */
- SetPort( tempPtr ); /* restore original grafPortwhen done */
- return ( noErr );
- }
-
-
- OSErr DoActivate ( wPtr )
- WindowPtr wPtr;
- {
- ControlHandle the_ctl;
-
- if ( wPtr == NULL)
- return ( nilHandleErr );
-
- if( HasGrow ( wPtr ))
- DrawGrowIcon( wPtr ); /* update grow icon appropriately */
- if(BitAnd(myEvent.modifiers,1) != 0)
- {
- SetPort( wPtr );
- ClipRect ( &(wPtr->portRect) ); /* make sure clipRect window sized */
- the_ctl = (ControlHandle)GetWRefCon ( wPtr );
- if ( the_ctl != NULL )
- HiliteControl ( the_ctl, 0 );
- }
- else
- {
- the_ctl = (ControlHandle)GetWRefCon ( wPtr );
- if ( the_ctl != NULL )
- HiliteControl ( the_ctl, 255 );
- }
- return ( noErr );
- }
-
-
- OSErr DoMouseDown ( globalPt )
- Point globalPt;
- {
- int windowPart; /* part of window or desktop where clicked */
- WindowPtr whichWindow; /* pointer to window where mouse was clicked*/
- long result;
- ControlHandle the_ctl;
- int the_part;
- pascal void MyTracker();
-
- windowPart = FindWindow(globalPt, &whichWindow);
-
- switch(windowPart)
- {
- case inMenuBar:
- Dispatch( MenuSelect( globalPt ));
- break;
-
- case inSysWindow:
- SystemClick( &myEvent, whichWindow ); /* send to DA */
- break;
-
- case inGoAway:
- if ( TrackGoAway( whichWindow, globalPt )) /* if cursor in box */
- {
- if ( BitAnd( myEvent.modifiers, optionKey )) /* option key */
- while ( FrontWindow() != NULL )
- DeAllocWindow( FrontWindow() );/* close all windows */
- else
- DeAllocWindow( whichWindow ); /* close specific window*/
- }
- break;
-
- case inDrag:
- DragWindow( whichWindow, globalPt, &dragRect );
- break;
-
- case inZoomIn:
- case inZoomOut:
- if ( TrackBox( whichWindow, globalPt, windowPart ))
- ZoomWindow( whichWindow, windowPart, TRUE );
- if( HasGrow ( whichWindow ))
- {
- SetPort ( whichWindow );
- ClipRect ( &(whichWindow->portRect) );
- DrawGrowIcon( whichWindow ); /* update grow icon */
- }
- break;
-
- case inGrow:
- result = GrowWindow( whichWindow, globalPt, &limitRect );
- SizeWindow( whichWindow, LoWord( result ), HiWord( result ), TRUE );
- if( HasGrow ( whichWindow ))
- {
- SetPort ( whichWindow );
- ClipRect ( &(whichWindow->portRect) );
- DrawGrowIcon( whichWindow ); /* update grow icon */
- }
- break;
-
- case inContent:
- if(whichWindow != FrontWindow())
- SelectWindow(whichWindow);
- else
- {
- GlobalToLocal ( &globalPt );
- if ( the_part = FindControl( globalPt, whichWindow, &the_ctl ) )
- {
- if ( the_part == inThumb )
- TrackControl ( the_ctl, globalPt, NULL );
- else
- TrackControl ( the_ctl, globalPt, MyTracker );
- }
- }
- break;
-
- default:
- return( miscErr );
- }
- return ( noErr );
- }
-
-
- void main( )
- {
- MaxApplZone();
- MoreMasters(); /* create more master pointers */
- MoreMasters(); /* create more master pointers */
- MoreMasters(); /* create more master pointers */
- MoreMasters(); /* create more master pointers */
-
- Init_all(); /* call initialization routine */
- UnloadSeg( &Init_all ); /* make segment purgable */
-
- do /* main event loop */
- {
- SystemTask(); /* let DAs have some CPU cycles */
- if(GetNextEvent( everyEvent, &myEvent ))
- {
- switch( myEvent.what )
- {
- case mouseDown:
- DoMouseDown( myEvent.where );
- break;
-
- case keyDown:
- case autoKey:
- DoKey( myEvent.message, myEvent.modifiers );
- break;
-
- case activateEvt:
- DoActivate( (WindowPtr) myEvent.message );
- break;
-
- case updateEvt :
- DoUpdate( (WindowPtr) myEvent.message );
- break;
- }
- }
- } while (!done);
- }
-
-
- void DeAllocWindow( wPtr )
- WindowPtr wPtr;
- {
- int i;
-
- if ( wPtr == NULL )
- return;
-
- for (i=0; i<MAXWINDOWS; i++)
- {
- if ( wPtrs[i] == wPtr )
- {
- DisposeWindow( wPtr );
- wPtrs[i] = NULL;
- return;
- }
- }
- }
-
-
- WindowPtr AllocWindow()
- {
- int i;
- ControlHandle the_ctl_hdl;
- int wType;
-
- wType = 4;
- for ( i=0; i<MAXWINDOWS; i++ )
- {
- if ( wPtrs[i] == NULL )
- {
- wPtrs[i] = GetNewWindow( RESID_BASE + wType, &(wRecs[i]), (Ptr)-1 );
- if ( wPtrs[i] != NULL )
- {
- if (( wType == 0 ) || ( wType == 8 ))
- SetGrow( wPtrs[i], TRUE );
- else
- SetGrow( wPtrs[i], FALSE );
- the_ctl_hdl = GetNewControl ( 256, wPtrs[i] );
- if ( the_ctl_hdl != NULL)
- SetWRefCon ( wPtrs[i], (long)the_ctl_hdl );
- }
- return(wPtrs[i]);
- }
- }
- return(NULL);
- }
-
-
- Boolean HasGrow( wPtr ) /* determines whether or not a window */
- WindowPtr wPtr; /* has a grow box, returns TRUE for yes */
- {
- return ( FALSE );
- }
-
-
- void SetGrow( wPtr, flag )
- WindowPtr wPtr;
- Boolean flag;
- {
- }
-
-
- pascal void MyTracker ( the_ctl, the_part )
- ControlHandle the_ctl;
- int the_part;
- {
- int amt;
-
- switch ( the_part )
- {
- case inUpButton:
- amt = -1;
- break;
- case inPageUp:
- amt = -10;
- break;
- case inPageDown:
- amt = 10;
- break;
- case inDownButton:
- amt = 1;
- break;
- default:
- amt = 0;
- }
- SetCtlValue ( the_ctl, GetCtlValue ( the_ctl ) + amt );
- }
-